package ar.edu.utn.frba.tacs.warnes;

import static org.junit.Assert.assertEquals;

import java.util.Date;
import java.util.List;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import ar.edu.utn.frba.tacs.warnes.entities.Auto;
import ar.edu.utn.frba.tacs.warnes.entities.Pieza;
import ar.edu.utn.frba.tacs.warnes.entities.Venta;
import ar.edu.utn.frba.tacs.warnes.utils.ConstantesWarnes;
import ar.edu.utn.frba.tacs.warnes.utils.ContenedorWarnes;

public class AutoTestCase {

	private ContenedorWarnes contenedor;
	private Pieza pieza;
	private Auto auto;

	@SuppressWarnings("deprecation")
	@Before
	public void inicializaciones() {
		this.contenedor = ContenedorWarnes.getInstance();
		
		this.pieza = this.contenedor.creaUnaPieza("Rueda");
		this.pieza.setId(new Long(1));
		this.pieza.setCategoria(ConstantesWarnes.Categoria.PARTES);
		
		this.auto = this.contenedor.creaUnAuto("ASD-123");
		this.auto.setPatente("asd-123");
		this.auto.setModelo(new Date().getYear());
		this.auto.setAnio(new Date());
		this.auto.setFechaDesguace(new Date());
		
		this.pieza.setAutoOrigen(this.auto);
	}

	@After
	public void limpiarContenedor() {
		this.contenedor.limpiate();
	}

	@Test
	public void testDameAutos() {
		List<Auto> autos = this.contenedor.getAutos();
		assertEquals(1, autos.size());
	}

	@Test
	public void testPiezasDelAuto() {
		Pieza pieza2 = this.contenedor.creaUnaPieza("Asiento");
		pieza2.setCategoria(ConstantesWarnes.Categoria.PARTES);
		pieza2.setAutoOrigen(this.auto);
		
		Pieza pieza3 = this.contenedor.creaUnaPieza("Asiento");
		pieza3.setCategoria(ConstantesWarnes.Categoria.PARTES);
		pieza3.setAutoOrigen(this.auto);
		
		assertEquals(3, this.auto.getPiezasDelAuto().size());
	}

	/**
	 * Testea el requerimiento: Se puede consultar el porcentaje de piezas
	 * que se vendieron de un determinado auto.
	 */
	@Test
	public void testConsultaPiezasVendidasDeUnAuto(){
		//Creacion del auto
		Auto auto2 = this.contenedor.creaUnAuto("DSA-789");
		
		//Creacion de piezas con un auto de origen
		Pieza pieza2 = this.contenedor.creaUnaPieza("Asiento");
		pieza2.setCategoria(ConstantesWarnes.Categoria.PARTES);
		pieza2.setAutoOrigen(this.auto);
		
		Pieza pieza3 = this.contenedor.creaUnaPieza("Asiento");
		pieza3.setCategoria(ConstantesWarnes.Categoria.PARTES);
		pieza3.setAutoOrigen(this.auto);
		
		Pieza pieza4 = this.contenedor.creaUnaPieza("Asiento");
		pieza4.setCategoria(ConstantesWarnes.Categoria.PARTES);
		pieza4.setAutoOrigen(auto2);
		
		// Reservo las piezas para poder venderlas
		this.pieza.reservate(null);
		pieza2.reservate(null);
		pieza3.reservate(null);
		pieza4.reservate(null);
		
		//Venta de las piezas y tests
		Venta venta = this.contenedor.nuevaVenta();		
		venta.venderPieza(this.pieza);
		assertEquals(new Float(1/3),this.auto.getPorcentajePiezasVendidas());
		
		venta.venderPieza(pieza2);
		assertEquals(new Float(2/3),this.auto.getPorcentajePiezasVendidas());

		venta.venderPieza(pieza3);
		assertEquals(new Float(3/3),this.auto.getPorcentajePiezasVendidas());

		venta.venderPieza(pieza4);
		assertEquals(new Float(3/3),this.auto.getPorcentajePiezasVendidas());
	}
	
}
